package innerClass;

/**
 * @ProjectName random_code
 * @PackageName innerClass
 * @ClassName AnonymousClass
 * @Description:
 * @author: Administrator
 * @Date: 2019/8/20 19:17
 * @Version 1.0
 */
public class AnonymousClass {
    //1.匿名内部类适合创建那种只需要一次使用的类，创建匿名内部类时会立即创建一个该类的实例，这个类定义立即消失，匿名内部类不能重复使用。
    //2.匿名内部类必须继承一个父类，或实现一个接口，但最多只能继承一个父类或实现一个接口。
    //3.匿名内部类不能是抽象类，因为系统在创建匿名内部类时，会立即创建匿名内部类的对象。
    //4.匿名内部类不能定义构造器。没有类名，故无法定义构造器，但匿名内部类可以定义初始化块，可以通过实例初始化块来完成构造器需要完成的事情。
    //最常用的创建匿名内部类的方式是需要创建某个接口类型的对象。

    public void test(Product p){
        System.out.println("购买了一个"+p.getName()+",花掉了"+p.getPrice());
    }

    public static void main(String[] args){
        AnonymousClass ac = new AnonymousClass();
        ac.test(new Product() {
            @Override
            public double getPrice() {
                return 567.8;
            }

            @Override
            public String getName() {
                return "AGP显卡";
            }
        });
    }
}

interface Product{
    public double getPrice();
    public String getName();
}
